/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.treepoke.business.ejb.administracionusuario;

import com.treepoke.common.dto.GrupoDTO;
import com.treepoke.common.dto.UsuarioDTO;
import com.treepoke.common.properties.Constant;
import com.treepoke.common.properties.PropertiesLoader;
import com.treepoke.dataaccess.DAOFactory;
import com.treepoke.dataaccess.dao.jdbcRealm.RealmDAO;
import com.treepoke.entityaccess.entity.ldaptp.Usuario;
import com.treepoke.entityaccess.entity.ldaptp.facade.UsuarioFacadeLocal;
import com.treepoke.util.exception.BusinessException;
import com.treepoke.util.exception.DataAccessException;
import com.treepoke.util.exception.UtilException;
import com.treepoke.util.location.ServiceLocator;
import com.treepoke.util.logging.CRCCLogger;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Properties;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.interceptor.Interceptors;
import javax.mail.MessagingException;
import javax.naming.NamingException;

/**
 *
 * @author Parmenio13
 */
@Stateless
public class AdministracionUsuarioBean implements AdministracionUsuarioLocal {

    private CRCCLogger logger = CRCCLogger.getLogger(Constant.getNOMBRE_APLICACION());
    private final static String CAMPO_ESTADO_ACTIVO = "Activo";
    private final static String CAMPO_ESTADO_INACTIVO = "Inactivo";
    private final static String CAMPO_ESTADO_BLOQUEADO = "Bloqueado";
    private final static String miembroAdministrador = PropertiesLoader.getProperty("ORGANIZACION_ADMINISTRADOR");

    @EJB
    UsuarioFacadeLocal usuarioFacade;

    @Override
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)

    public void guardarUsuario(UsuarioDTO usuarioDTO) throws BusinessException {
        Connection connectionJdbcRealmMySql = null;
        try {
            connectionJdbcRealmMySql = ServiceLocator.getInstance().getConnection(Constant.getJDBC_REALM_DATASOURCE_JNDI_NAME());
            DAOFactory dAOFactory = DAOFactory.getDAOFactory(connectionJdbcRealmMySql, Constant.getDATA_BASE_PROVIDER_MYSQL());
            RealmDAO realmDAO = dAOFactory.getRealmDAO();
            /**
             * 1. Consultar si existe usuario con el identificador unico Si
             * existe: Actualizar Usuario No existe: Guardar Usuario
             */
            UsuarioDTO udto = new UsuarioDTO();

            udto = realmDAO.consultarUsuario(usuarioDTO.getEmail());

            System.out.println("consultarUsuario" + udto.getIdUsuario() + " " + udto.getEmail() + " " + udto.getComunidad() + " " + udto.getNombreUsuario() + " " + udto.getPassword());

        } catch (DataAccessException ex) {
            throw new BusinessException(ex.getMessage(), ex, 0);
        } catch (UtilException ex) {
            throw new BusinessException(ex.getMessage(), ex, 0);
        } finally {
            try {
                ServiceLocator.getInstance().closeConnection(connectionJdbcRealmMySql);
            } catch (UtilException ex) {
                logger.errorMessage(ex.getMessage(), ex);
            }
        }
    }

    private HashMap getMapCollectionGrupoDTO(Collection<GrupoDTO> gdtos) {
        HashMap hashMap = new HashMap();
        for (GrupoDTO object : gdtos) {
            hashMap.put(object.getDescripcion(), object);
        }

        return hashMap;
    }

    @Override
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public void cambiarContrasena(UsuarioDTO usuarioDTOs) throws BusinessException {
        /*
         Connection connection = null;

         try {
         connection = ServiceLocator.getInstance().getConnection(Constant.getLDAP_DATASOURCE_JNDI_NAME());
         DAOFactory dAOFactory = DAOFactory.getDAOFactory(connection, Constant.getDATA_BASE_PROVIDER_LDAP());
         AdministracionUsuarioDAO administracionUsuarioDAO = dAOFactory.getAdministracionUsuarioDAO();

         administracionUsuarioDAO.cambiarContrasena(usuarioDTOs);

         } catch (DataAccessException ex) {
         throw new BusinessException(ex.getMessage(), ex, 0);
         } catch (UtilException ex) {
         throw new BusinessException(ex.getMessage(), ex, 0);
         } finally {
         try {
         ServiceLocator.getInstance().closeConnection(connection);
         } catch (UtilException ex) {
         logger.errorMessage(ex.getMessage(), ex);
         }
         } */
    }

    public UsuarioDTO obtenerUsuarioXEmail(String email) {
        UsuarioDTO userDTO = new UsuarioDTO();
        Usuario user = usuarioFacade.obtenerUsuarioXEmail(email);
        userDTO.setEmail(user.getUsuarioPK().getEmail());
        userDTO.setNombreUsuario(user.getNombre());
        userDTO.setPassword(user.getPassword());

        return userDTO;
    }

}
